# 高级的 文件、文件夹、压缩包 处理模块
#(src:source源  dst:降落)

# 将文件内容拷贝到另一个文件中
import shutil
with open('file', 'r', encoding='utf-8') as f,\
      open('file1', 'w', encoding='utf-8') as f1:
     shutil.copyfileobj(f, f1)

# 仅拷贝文件
shutil.copyfile(r'C:\Users\笔记.txt', r'C:\test1\笔记.txt')
# 仅拷贝状态信息
shutil.copystat(src="",dst="")
# 仅拷贝权限
shutil.copymode(src="",dst="")
# 拷贝文件和权限
shutil.copy(src="",dst="")
# 拷贝文件和状态信息
shutil.copy2(src="",dst="")
# 拷贝一个目录
shutil.copytree(src="",dst="")
# 删除一个目录
shutil.rmtree(path="")
# 移动文件或目录
shutil.move(src="",dst="")

#创建压缩包
shutil.make_archive(base_name="", format="",)

'''创建压缩包并返回文件路径，例如：zip、tar

base_name： 压缩包的文件名，也可以是压缩包的路径。只是文件名时，则保存至当前目录，否则保存至指定路径，
如：www                        =>保存至当前路径
如：/Users/wupeiqi/www =>保存至/Users/wupeiqi/
format：	压缩包种类，“zip”, “tar”, “bztar”，“gztar”
root_dir：	要压缩的文件夹路径（默认当前目录）
owner：	用户，默认当前用户
group：	组，默认当前组
logger：	用于记录日志，通常是logging.Logger对象'''

# 将 /Users/wupeiqi/Downloads/test 下的文件打包放置当前程序目录
ret = shutil.make_archive("wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

# 将 /Users/wupeiqi/Downloads/test 下的文件打包放置 /Users/wupeiqi/目录
ret1 = shutil.make_archive("/Users/wupeiqi/wwwwwwwwww", 'gztar', root_dir='/Users/wupeiqi/Downloads/test')

# zipfile 压缩解压
import zipfile

# 压缩
z = zipfile.ZipFile('laxi.zip', 'w')
z.write('a.log')
z.write('data.data')
z.close()

# 解压
z = zipfile.ZipFile('laxi.zip', 'r')
z.extractall()
z.close()

#tarfile 压缩解压
import tarfile

# 压缩
tar = tarfile.open('your.tar','w')
tar.add('/Users/wupeiqi/PycharmProjects/bbs2.zip', arcname='bbs2.zip')
# arcname指定压缩目录,不指定就默认文件绝对目录
tar.add('/Users/wupeiqi/PycharmProjects/cmdb.zip', arcname='cmdb.zip')
tar.close()

# 解压
tar = tarfile.open('your.tar','r')
tar.extractall()  # 可设置解压地址
tar.close()
